package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 红包实体类，用于存储和管理红包的详细信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "red_envelope")
public class RedEnvelope {

    /**
     * 红包ID，主键。
     */
    @ApiModelProperty(value = "红包ID")
    private Long id;

    /**
     * 红包编号，唯一标识一个红包。
     */
    @ApiModelProperty(value = "红包编号")
    private String envelopeNo;

    /**
     * 发起人ID，通常是用户ID。
     */
    @ApiModelProperty(value = "发起人ID")
    private Long memberId;

    /**
     * 红包类型，0表示随机，1表示定额。
     */
    @ApiModelProperty(value = "红包类型，0：随机，1：定额")
    private int type = 0;

    /**
     * 是否邀请拆分红包，0表示否，1表示是。
     * 邀请拆分红包允许用户通过邀请好友增加领取次数。
     */
    @ApiModelProperty(value = "是否邀请拆分红包，0：否，1：是")
    private int invite = 0;

    /**
     * 是否平台发出，0表示否，1表示是。
     * 平台发出的红包通常用于营销活动。
     */
    @ApiModelProperty(value = "是否平台发出，0：否，1：是")
    private int plateform = 0;

    /**
     * 随机红包类型的最大可领取额度。
     */
    @ApiModelProperty(value = "随机红包最大领取额度")
    private BigDecimal maxRand = BigDecimal.ZERO;

    /**
     * 红包总额。
     */
    @ApiModelProperty(value = "红包总额")
    private BigDecimal totalAmount = BigDecimal.ZERO;

    /**
     * 领取总额，即已领取的总金额。
     */
    @ApiModelProperty(value = "领取总额")
    private BigDecimal receiveAmount = BigDecimal.ZERO;

    /**
     * 红包数量，即红包的总份数。
     */
    @ApiModelProperty(value = "红包数量")
    private int count = 0;

    /**
     * 红包Logo图片，平台发出的红包可自定义。
     */
    @ApiModelProperty(value = "红包Logo图片")
    private String logoImage;

    /**
     * 红包背景图，平台发出的红包可自定义。
     */
    @ApiModelProperty(value = "红包背景图")
    private String bgImage;

    /**
     * 红包名称，平台发出的红包可自定义。
     */
    @ApiModelProperty(value = "红包名称")
    private String name;

    /**
     * 红包描述。
     */
    @ApiModelProperty(value = "红包描述")
    private String detail;

    /**
     * 红包币种单位。
     */
    @ApiModelProperty(value = "红包币种单位")
    private String unit;

    /**
     * 已领取数量，即已领取的红包份数。
     */
    @ApiModelProperty(value = "已领取数量")
    private int receiveCount = 0;

    /**
     * 领取状态，0表示领取中，1表示已领完，2表示过期结束。
     */
    @ApiModelProperty(value = "领取状态，0：领取中，1：已领完，2：过期结束")
    private int state = 0;

    /**
     * 过期时间，单位为小时，默认为24小时。
     */
    @ApiModelProperty(value = "过期时间，单位为小时")
    private int expiredHours = 24;

    /**
     * 创建时间，红包创建的时间戳。
     */
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /**
     * 邀请人信息（电话/邮箱），非持久化字段。
     */
    @ApiModelProperty(value = "邀请人信息")
    private String inviteUser;

    /**
     * 邀请人头像，非持久化字段。
     */
    @ApiModelProperty(value = "邀请人头像")
    private String inviteUserAvatar;
}
